home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / maximus / maxlg132.zip / MAXDEL.C < prev    next >
C/C++ Source or Header  |  1991-10-02  |  5KB  |  162 lines

  1. /***************************************************************************\
  2.      MAXDEL.C
  3.  
  4.    Read Maxlog.Dat and delete all references to a specified file name.
  5.  
  6.    Written by: Pete Norloff
  7.                10/2/91
  8.  
  9. \***************************************************************************/
  10. /* Include Files:                                                          */
  11. #define INCL_DOSFILEMGR
  12. #include <os2.h>
  13.  
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <process.h>
  17. #include <stdlib.h>
  18.  
  19. /***************************************************************************/
  20. /* Function Prototypes:                                                    */
  21. VOID  main(SHORT argc, CHAR *argv[]);
  22. VOID  purge_data_file(VOID);
  23.  
  24. /***************************************************************************/
  25. #define LOGOFF           1
  26. #define DOWNLOAD         2
  27. #define FILE_REQ         3
  28. #define MAIL_SESSION_END 4
  29.  
  30. /***************************************************************************/
  31. /* Data  Structures:                                                       */
  32. typedef struct xfr
  33. {
  34.    LONG  date;
  35.    LONG  time;
  36.    SHORT node;
  37.    LONG  filesize;
  38.    SHORT name_length;
  39. };
  40. struct xfr xfer;
  41.  
  42. typedef struct lgoff
  43. {
  44.    LONG  date;
  45.    LONG  time;
  46.    SHORT node;
  47.    LONG  duration;
  48. };
  49. struct lgoff logoff;
  50.  
  51. /***************************************************************************/
  52. /* External Variables:                                                     */
  53. CHAR delfile[10][40];
  54. SHORT nfiles;
  55.  
  56. /***************************************************************************/
  57. VOID main(SHORT argc, CHAR *argv[])
  58. {
  59.    SHORT i;
  60.  
  61.    printf("MaxDel v1.0 - delete references to a specified file name.\n");
  62.    printf("written by Pete Norloff, 1:109/347@fidonet\n\n");
  63.  
  64.    if ((argc > 1) && (argc <= 11))
  65.    {
  66.       nfiles = argc-1;
  67. /*    Purge filename from Maxlog.dat.                                      */
  68.       printf("Purging %i filenames:\n",nfiles);
  69.       for (i=0; i< nfiles; i++)
  70.       {
  71.          strcpy(delfile[i],argv[i+1]);
  72.          printf("%s\n",delfile[i]);
  73.       }
  74.       purge_data_file();
  75.    }
  76.    else
  77.    {
  78.       printf("Usage is MaxDel filename [[filename] filename...].\n");
  79.    }
  80.  
  81.    printf("Done.\n");
  82. }
  83. /***************************************************************************/
  84. VOID purge_data_file()
  85. {
  86.    FILE  *old_file,*new_file;
  87.    SHORT downloads_purged = 0;
  88.    ULONG bytes_dl_purged = 0;
  89.    SHORT event_number;
  90.    CHAR  filename[255];
  91.    SHORT i;
  92.    SHORT skip;
  93.  
  94. /* Copy the .Dat file to .Bak.                                             */
  95.    DosCopy("Maxlog.Dat","Maxlog.Bak",DCPY_EXISTING,0);
  96.  
  97.    if ((old_file=fopen("Maxlog.Bak","rb")) == NULL)
  98.    {
  99.       printf("Error opening Maxlog.Bak (purge)\n");
  100.       exit(1);
  101.    }
  102.    if ((new_file=fopen("Maxlog.Dat","wb")) == NULL)
  103.    {
  104.       printf("Error opening Maxlog.Dat (purge)\n");
  105.       exit(1);
  106.    }
  107.  
  108.    while (feof(old_file) == 0)
  109.    {
  110.       fread(&event_number,sizeof(SHORT),1,old_file);
  111.       switch(event_number)
  112.       {
  113.          case DOWNLOAD:
  114.          case FILE_REQ:
  115.             if (fread(&xfer,sizeof(xfer),1,old_file) == 0) break;
  116.             fread(filename,xfer.name_length,1,old_file);
  117.  
  118.             skip = FALSE;
  119.             for (i=0; i<nfiles; i++)
  120.             {
  121.                if (stricmp(filename,delfile[i]) == 0)
  122.                {
  123.                   skip = TRUE;
  124.                   break;
  125.                }
  126.             }
  127.  
  128.             if (skip == TRUE)
  129.             {
  130.                printf("Purging record of %s\n",delfile[i]);
  131.                downloads_purged++;
  132.                bytes_dl_purged += xfer.filesize;
  133.             }
  134.             else
  135.             {
  136.                fwrite(&event_number,sizeof(SHORT),1,new_file);
  137.                fwrite(&xfer,sizeof(xfer),1,new_file);
  138.                fwrite(filename,xfer.name_length,1,new_file);
  139.             }
  140.             break;
  141.  
  142.          case LOGOFF:
  143.          case MAIL_SESSION_END:
  144.             if (fread(&logoff,sizeof(logoff),1,old_file) == 0) break;
  145.             fwrite(&event_number,sizeof(SHORT),1,new_file);
  146.             fwrite(&logoff,sizeof(logoff),1,new_file);
  147.             break;
  148.  
  149.          default:
  150.             printf("UNKNOWN EVENT!!! (=%i) (bug)(purge)\n",event_number);
  151.             break;
  152.       }
  153.    }
  154.  
  155.    fclose(new_file);
  156.    fclose(old_file);
  157.  
  158.    printf("\nDownloads Purged: %i\n",downloads_purged);
  159.    printf("\n    Bytes Purged: %li\n\n",bytes_dl_purged);
  160. }
  161. /***************************************************************************/
  162.